package asia.yuanding.wechat.system.util;

import lombok.Data;

/**
 * 全局统一返回结果
 */
@Data
public class R<T> {

    /** 状态码 */
    private Integer code;

    /** 提示信息 */
    private String message;

    /** 返回数据 */
    private T data;

    private R(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /** 成功（带数据） */
    public static <T> R<T> ok(T data) {
        return new R<>(200, "success", data);
    }

    /** 成功（无数据） */
    public static <T> R<T> ok() {
        return new R<>(200, "success", null);
    }

    /** 成功（自定义消息+数据） */
    public static <T> R<T> ok(String message, T data) {
        return new R<>(200, message, data);
    }

    /** 失败（自定义消息） */
    public static <T> R<T> fail(String message) {
        return new R<>(500, message, null);
    }

    /** 失败（自定义状态码+消息） */
    public static <T> R<T> fail(Integer code, String message) {
        return new R<>(code, message, null);
    }
}
